package com.util;

import java.io.IOException;

import android.media.MediaRecorder;
import android.os.Environment;

import com.common.method.ChatHelper;

public class SoundMeter {
	// static final private double EMA_FILTER = 0.6;

	private MediaRecorder mRecorder = null;

	// private double mEMA = 0.0;

	public void start(String name) {
		if (!Environment.getExternalStorageState().equals(
				android.os.Environment.MEDIA_MOUNTED)) {
			return;
		}
		if (mRecorder == null) {
			mRecorder = new MediaRecorder();
			/**
			 * mediaRecorder.setAudioSource设置声音来源。
			 * MediaRecorder.AudioSource这个内部类详细的介绍了声音来源。
			 * 该类中有许多音频来源，不过最主要使用的还是手机上的麦克风，MediaRecorder.AudioSource.MIC
			 */
			mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
			/**
			 * mediaRecorder.setOutputFormat代表输出文件的格式。该语句必须在setAudioSource之后，
			 * 在prepare之前。
			 * OutputFormat内部类，定义了音频输出的格式，主要包含MPEG_4、THREE_GPP、RAW_AMR……等。
			 */
			mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
			/**
			 * mediaRecorder.setAddioEncoder()方法可以设置音频的编码
			 * AudioEncoder内部类详细定义了两种编码：AudioEncoder.DEFAULT、AudioEncoder.AMR_NB
			 */
			mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

			mRecorder.setOutputFile(ChatHelper.getVoiceSavePath() + name);
			try {
				mRecorder.prepare();
				mRecorder.start();

				// mEMA = 0.0;
			} catch (IllegalStateException e) {
				System.out.print(e.getMessage());
			} catch (IOException e) {
				System.out.print(e.getMessage());
			}

		}
	}

	public void stop() {
		if (mRecorder != null) {
			mRecorder.stop();
			mRecorder.release();
			mRecorder = null;
		}
	}

	public void pause() {
		if (mRecorder != null) {
			mRecorder.stop();
		}
	}

	public void start() {
		if (mRecorder != null) {
			mRecorder.start();
		}
	}

	// 获取音量等级，用户获取图片
	public double getAmplitude() {
		if (mRecorder != null)
			return (mRecorder.getMaxAmplitude() / 2700.0);
		else
			return 0;

	}

	// private double getAmplitudeEMA() {
	// double amp = getAmplitude();
	// mEMA = EMA_FILTER * amp + (1.0 - EMA_FILTER) * mEMA;
	// return mEMA;
	// }
}
